﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace SInvaders
{
    public class Menu
    {
        #region Variaveis
        Texture2D telaMenu, botaoMenu;
        Vector2[,] opcaoMenu;
        Vector2 posicaoBotao;
        Aviso aviso;
        #endregion

        public void Initialize()
        {
            opcaoMenu = new Vector2[4, 4];
            opcaoMenu[0, 0] = new Vector2(240, 270);
            opcaoMenu[1, 1] = new Vector2(240, 330);
            opcaoMenu[2, 2] = new Vector2(240, 390);
            opcaoMenu[3, 3] = new Vector2(240, 440);
            posicaoBotao = opcaoMenu[0, 0];
            aviso = new Aviso();
        }

        public void Load(ContentManager content)
        {
            telaMenu = content.Load<Texture2D>("telamenu");
            botaoMenu = content.Load<Texture2D>("botaomenu");
            aviso.LoadContent(content);
        }

        public void Update(GameTime gameTime, KeyboardState teclado_atual, KeyboardState teclado_anterior)
        {
            aviso.Update();

            //MOVIMENTO DA NAVE QUE SELECIONA AS OPÇÕES DO MENU
            if ((teclado_atual.IsKeyDown(Keys.Down) && !teclado_anterior.IsKeyDown(Keys.Down)) || (teclado_atual.IsKeyDown(Keys.Up) && !teclado_anterior.IsKeyDown(Keys.Up)))
            {
                if (posicaoBotao == (opcaoMenu[0, 0])) //JOGAR
                {
                    if (teclado_atual.IsKeyDown(Keys.Down))
                        posicaoBotao = opcaoMenu[1, 1]; // muda de posicão para baixo
                    if (teclado_atual.IsKeyDown(Keys.Up))
                        posicaoBotao = opcaoMenu[3, 3]; // muda de posicão para CIMA
                }
                else if (posicaoBotao == (opcaoMenu[1, 1])) // CREDITOS
                {
                    if (teclado_atual.IsKeyDown(Keys.Down))
                        posicaoBotao = opcaoMenu[2, 2];
                    if (teclado_atual.IsKeyDown(Keys.Up))
                        posicaoBotao = opcaoMenu[0, 0];
                }
                else if (posicaoBotao == (opcaoMenu[2, 2])) // RANKING
                {
                    if (teclado_atual.IsKeyDown(Keys.Down))
                        posicaoBotao = opcaoMenu[3, 3];
                    if (teclado_atual.IsKeyDown(Keys.Up))
                        posicaoBotao = opcaoMenu[1, 1];
                }
                else if (posicaoBotao == (opcaoMenu[3, 3])) // SAIR
                {
                    if (teclado_atual.IsKeyDown(Keys.Down))
                        posicaoBotao = opcaoMenu[0, 0];
                    if (teclado_atual.IsKeyDown(Keys.Up))
                        posicaoBotao = opcaoMenu[2, 2];
                }
            }

            //CONFERE SE ALGUMA OPÇÃO DO MENU FOI SELECIONADA 
            if (posicaoBotao == opcaoMenu[1, 1] && teclado_atual.IsKeyDown(Keys.Enter) && !teclado_anterior.IsKeyDown(Keys.Enter))
            {
                GerenciadorFases.EstadoAtual = GerenciadorFases.EstadosJogo.CREDITOS;
            }
            else if (posicaoBotao == opcaoMenu[3, 3] && teclado_atual.IsKeyDown(Keys.Enter) && !teclado_anterior.IsKeyDown(Keys.Enter))
            {
                GerenciadorFases.EstadoAtual = GerenciadorFases.EstadosJogo.SAIR;
            }
            else if (posicaoBotao == opcaoMenu[0, 0] && teclado_atual.IsKeyDown(Keys.Enter) && !teclado_anterior.IsKeyDown(Keys.Enter))
            {
                GerenciadorFases.EstadoAtual = GerenciadorFases.EstadosJogo.FASE1;
            }
            else if (posicaoBotao == opcaoMenu[2, 2] && teclado_atual.IsKeyDown(Keys.Enter) && !teclado_anterior.IsKeyDown(Keys.Enter))
            {
                GerenciadorFases.EstadoAtual = GerenciadorFases.EstadosJogo.RANKING;
            }
        }

        public void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(telaMenu, new Vector2(0, 0), Color.White);
            spriteBatch.Draw(botaoMenu, posicaoBotao, Color.White);
            aviso.Draw(spriteBatch);
        }
    }

}
